home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / PATH_ENV / TEXTLIST.D < prev    next >
Encoding:
Modula Definition  |  1990-06-21  |  4.1 KB  |  120 lines

  1. DEFINITION MODULE TextLists.
  2. !!!
  3.   > Der Puffer kann dann entweder beim Öffnen auf eine statische Größe
  4.     alloziert werden oder ggf auch ein dynamischer Modus aktiviert
  5.     werden.
  6.  
  7.     Dies Modul könnte dann von CallModule auch für die 'driver'-Liste
  8.     verwendet werden.
  9.  
  10. (*
  11.  * Verwaltet Listen von Pfadnamen und bietet Funktionen, um Dateien
  12.  * auf diesen Pfaden zu suchen.
  13.  *)
  14.  
  15. FROM SYSTEM IMPORT ADDRESS, LOC;
  16. FROM MOSGlobals IMPORT MemArea;
  17.  
  18. TYPE    TextList;
  19.  
  20. (* muß opaque sein, damit Kopien des handles immer den selben Desc.
  21.  * verwenden!
  22.  *)
  23.         TextList = RECORD
  24.                      buf : MemArea; (* s. Anmerkung gleich unten *)
  25.                      heap: BOOLEAN; (* TRUE: mit Storage.ALLOCATE angelegt *)
  26.                      seps: ARRAY [0..1] OF CHAR;
  27.                      ptr : ADDRESS; (* Zeiger für div. Zwecke *)
  28.                    END;
  29.           (*
  30.            * Anmerkung: Ist 'buf.length' Null, wird 'buf.bottom'
  31.            * schlicht als Zeiger auf einen Null-terminierten String
  32.            * beliebiger Länge verwendet. So kann der String nachträglich
  33.            * verlängert werden, allerdings nicht mit den hiesigen, sonst
  34.            * dafür vorgesehenen Funktionen, sondern nur durch Direktzugriff
  35.            * auf den String.
  36.            *)
  37.  
  38.  
  39.         (*
  40.          * Trennzeichen zwischen den Pfaden:
  41.          *)
  42.         Separator = (dftSep,       (* internes Zeichen, unbestimmt   *)
  43.                      lineSep,      (* CR/LF (zeilenweise)            *)
  44.                      spcSep,       (* Leerzeichen                    *)
  45.                      envSep);      (* ';' (für Environment-Variable) *)
  46.  
  47.         (*
  48.          * Scanner-Prozedur für 'ScanStrings'
  49.          *)
  50.         ScanProc = PROCEDURE (CARDINAL, VAR ARRAY OF CHAR): BOOLEAN;
  51.                                                    (* RETURN TRUE: continue *)
  52.  
  53. PROCEDURE InitTextList (VAR handle: TextList);
  54.   (*
  55.    * Setzt 'handle' in einen definierten Zustand:
  56.    * Die Liste enthält keine Pfade.
  57.    *)
  58.  
  59. PROCEDURE CreateTextList (VAR handle: TextList; size: LONGCARD);
  60.   (*
  61.    * Legt einen Pfad-Puffer mit 'size' Bytes mit hilfe der
  62.    * ALLOCATE-Funktion aus Storage an.
  63.    * Als Separator wird erstmal der interne ('dftSep') definiert.
  64.    * Der Puffer wird gelöscht.
  65.    *
  66.    * Am Ende sollte der Puffer mit 'DeleteTextList' wieder freigegeben
  67.    * werden.
  68.    *)
  69.  
  70. PROCEDURE DeleteTextList (VAR handle: TextList);
  71.   (*
  72.    * Gibt einen mit 'CreateTextList' reservierten Puffer wieder frei.
  73.    *)
  74.  
  75. PROCEDURE DefineTextList (VAR handle: TextList; buffer: MemArea);
  76.   (*
  77.    * Alternativ zu 'CreateTextList' kann mit dieser Funktion ein
  78.    * bereits angelegter Puffer (z.B. durch 'SysAlloc' oder eine
  79.    * globale Variable) als Pfadlisten-Puffer initialisiert werden.
  80.    * Als Separator wird erstmal der interne ('dftSep') definiert.
  81.    * Der Puffer wird gelöscht.
  82.    *)
  83.  
  84. PROCEDURE SetTextList (VAR handle: TextList; buffer: MemArea; sep: Separator);
  85.   (*
  86.    * Wie 'DefineTextList', nur wird davon ausgegangen, daß der
  87.    * angegebene Puffer bereits eine Pfadliste enthält, er wird also
  88.    * nicht gelöscht. Das verwendete Trennzeichen ist in 'sep' anzugeben.
  89.    * Anwendung findet diese Funktion, wenn z.B. die Environment-Variable
  90.    * "PATH" für eine Pfadliste verwendet werden soll (näheres im Modul
  91.    * 'Environment', Funktion 'ArgMEM').
  92.    *)
  93.  
  94. PROCEDURE ClearTextList (VAR handle: TextList);
  95.   (*
  96.    * Löscht den Puffer
  97.    *)
  98.  
  99. PROCEDURE Separate (VAR handle: TextList; sep: Separator);
  100.   (*
  101.    * Die Pfade werden mit den in 'sep' angegebenen Trennzeichen
  102.    * getrennt.
  103.    * Dies ist sinnvoll, wenn danach die Liste ausgegeben werden soll,
  104.    * beispielsweise in eine Datei: Wird 'Separate (path, lineSep)'
  105.    * aufgerufen und danach die .............
  106.  
  107.    *)
  108.  
  109. PROCEDURE AppendStrings (REF from: TextList; VAR to: TextList);
  110.  
  111. PROCEDURE AppendString (REF str: ARRAY OF CHAR; VAR to: TextList);
  112.  
  113. PROCEDURE Reset (VAR handle: TextList);
  114.  
  115. PROCEDURE GetNext (VAR handle: TextList): BOOLEAN;
  116.  
  117. PROCEDURE ScanStrings (REF handle: TextList; with: ScanProc);
  118.  
  119. END TextLists.
  120.